import axios from 'axios';
import {extractKeyFromTimestamp} from './cryptoUtils';
import {ElNotification} from 'element-plus'; // 导入 Element Plus 的通知组件
import {useUserStore} from '@/stores/user'; // 引入用户 store
import {detailStore} from '@/stores/detail'; // 引入详细 store

const api = axios.create({
    baseURL: 'http://127.0.0.1:8888/api', // 你的 API 基础 URL
    // baseURL: 'http://127.0.0.1:8080/api', // 你的 API 基础 URL
    // baseURL: '/api', // 你的 API 基础 URL
});

// 请求拦截器：加密请求数据并添加时间戳到请求头
api.interceptors.request.use(async (config) => {
    const userStore = useUserStore(); // 获取用户 store
    userStore.loadUserInfoFromLocalStorage(); // 从 localStorage 加载用户信息
    const { key, timestamp } = extractKeyFromTimestamp();
    config.headers['ms'] = timestamp;

    // 检查是否有用户信息，并将其添加到请求头
    if (userStore.userInfo) {
        // const token = encryptData(us, key);
        config.headers['us'] = userStore.userToken; // 添加 token 到请求头
    }

    // 加密请求参数
    if (config.method === 'get' && config.params) {
        // config.params = encryptData(config.params, key);
    } else if (config.data) {
        // config.data = encryptData(config.data, key);
    }

    return config;
}, (error) => {
    return Promise.reject(error);
});

// 响应拦截器：解密响应数据
api.interceptors.response.use((response) => {
    if (response.data) {
        if (response.data.code !== 0) {
            const message = response.data.message || '发生错误，请稍后再试';
            ElNotification({
                title: '错误提示',
                message: message,
                type: 'error',
            });
            return Promise.reject(new Error(message));
        }

        // 解密数据
        // const ms = response.headers['ms']; // 获取响应头中的 ms 参数
        // const { key } = extractKeyFromTimestamp(ms);
        // (response.data.data,'00000000000000000000');
        // response.data.data = JSON.parse(response.data.data);
        // response.data.data = decryptData(response.data.data, key);
    }

    return response; // 确保正常返回响应
}, (error,response) => {
    return handleResponseError(error,response);
});

const handleResponseError = (error,response) => {
    if (error.response) {
        const { status, data } = error.response;
        let errorMessage;

        if (status === 400) {
            errorMessage = data.message || '请求数据不完整';
        } else if (status === 401) {
            errorMessage = '未授权，登录过期，请重新登录';
        } else if (status === 403) {
            errorMessage = '禁止访问!请检查是否登录了！';
            detailStore.clear(); // 确保 detailStore 中有一个 clear 方法
        } else if (status === 404) {
            errorMessage = '请求的资源未找到';
        } else if (status === 500) {
            errorMessage = '请检查是否登录了！';
        } else if (status === 200) {
            errorMessage = response.data.message || '请求成功！';
        }else {
            errorMessage = response.data.message;
        }

        ElNotification({
            title: '错误提示',
            message: errorMessage,
            type: 'error',
        });
        return Promise.reject(new Error(errorMessage));
    } else if (error.request) {
        ElNotification({
            title: '错误提示',
            message: '网络错误，请检查连接',
            type: 'error',
        });
    } else {
        console.error('Error:', error.message);
    }

    return Promise.reject(error);
};

export default api;
